Установка BARY в Docker
March 17, 2026Введение
Эта инструкция описывает установку BARY в Docker на Linux-сервере.
Схема запуска такая:
baryзапускаетserver.jsкак постоянный сервисinstall.jsзапускается внутри уже работающего контейнераbarybaryиспользуетhostnetwork для корректной работы discovery, mDNS и HomeKit- SQLite база,
logsиpersistсохраняются на хосте - при необходимости позже можно перейти на MySQL
Что понадобится
- Linux-сервер с установленными Docker и Docker Compose
- доступ к терминалу с правами на запуск Docker
- свободный TCP-порт
80для веб-интерфейса - свободный UDP-порт
5353для mDNS/Bonjour
Проверьте, что Docker доступен:
docker --version
docker compose version
1. Создайте рабочую директорию
mkdir -p /opt/stacks/bary
cd /opt/stacks/bary
2. Создайте Dockerfile
FROM node:16-bullseye
RUN apt-get -y update
RUN DEBIAN_FRONTEND="noninteractive" apt-get -y install tzdata
RUN apt-get install -y iproute2 dnsmasq hostapd iw autoconf automake libtool g++ pkg-config mosquitto sqlite3 samba samba-client ntp libudev-dev build-essential
RUN apt-get install -y git wget zip
RUN apt-get install -y ffmpeg
RUN apt-get install -y avahi-daemon avahi-discover libnss-mdns libavahi-compat-libdnssd-dev
RUN mkdir -p /srv
WORKDIR /srv
RUN wget http://bary.io/bary-core-dev.zip -O core.zip
RUN wget http://bary.io/bary-client-latest.zip -O www.zip
RUN unzip -o core.zip
RUN rm core.zip
RUN rm -rf www
RUN mkdir -p www
RUN unzip -o www.zip -d /srv/www
RUN rm www.zip
RUN cp -n ./package_example.json ./package.json
RUN npm install
RUN npm install mysql2
RUN sed -i 's/#enable-dbus=yes/enable-dbus=yes/g' /etc/avahi/avahi-daemon.conf
EXPOSE 80/tcp
EXPOSE 5353/udp
CMD /etc/init.d/dbus restart && /etc/init.d/avahi-daemon restart && node /srv/server.js
3. Создайте docker-compose.yml
services:
mysql:
image: mysql:8.0
container_name: bary-mysql
restart: unless-stopped
environment:
MYSQL_DATABASE: bary
MYSQL_USER: bary
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
command:
- --default-authentication-plugin=mysql_native_password
volumes:
- ./mysql:/var/lib/mysql
ports:
- '3306:3306'
bary:
build: .
container_name: bary
restart: unless-stopped
depends_on:
- mysql
network_mode: host
volumes:
- ./config:/srv/config
- ./database.sqlite:/srv/database.sqlite
- ./logs:/srv/logs
- ./persist:/srv/persist
baryзапускается вhostnetwork. Это рекомендуется для Linux-сервера, если используются HomeKit, mDNS и discovery в локальной сети.
mysqlв compose уже подготовлен для последующего перехода на MySQL, но для базовой установки можно использовать SQLite.
mysql2устанавливается в образ явно, чтобы BARY мог работать с MySQL даже если в архивномpackage_example.jsonэтот модуль отсутствует.
Важно про host network
- Эта схема рассчитана на Linux-сервер. На macOS и Windows поведение
hostnetwork отличается. - Порт
80на хосте должен быть свободен, так какbaryбудет слушать его напрямую. - Порт
5353/udpнужен для mDNS/Bonjour discovery. Если он уже занят другим сервисом на хосте, обнаружение устройств и сетевые объявления будут конфликтовать. - HomeKit использует не только mDNS, поэтому для корректной работы важна вся сетевая схема целиком, а не только один порт.
- Если на сервере уже работает reverse proxy или другой веб-сервис на
80, эту схему нужно адаптировать отдельно.
4. Создайте каталоги и пустую SQLite базу
mkdir -p config logs persist mysql
touch database.sqlite
Проверьте, что database.sqlite создан именно как файл:
ls -l database.sqlite
file database.sqlite
Ожидается обычный файл, а не директория.
5. Проверьте права
chmod 755 config logs persist mysql
chmod 664 database.sqlite
ls -ld config logs persist mysql
ls -l database.sqlite
Если файлы и каталоги были созданы от root, назначьте владельца:
sudo chown -R $USER:$USER /opt/stacks/bary
Быстрая проверка перед запуском
ls -ld /opt/stacks/bary /opt/stacks/bary/config /opt/stacks/bary/logs /opt/stacks/bary/persist /opt/stacks/bary/mysql
ls -l /opt/stacks/bary/database.sqlite
file /opt/stacks/bary/database.sqlite
Ожидаемый результат:
database.sqliteсуществуетdatabase.sqliteопределяется как обычный файл- каталоги
config,logs,persist,mysqlсуществуют - у текущего пользователя есть права на запись в
/opt/stacks/bary
6. Создайте config/config.js
Контейнер читает конфиг только из config/config.js.
Пример минимального конфига для SQLite (будет создан автоматически при установке):
const config = {
environment: 'production',
production: {
dialect: 'sqlite',
database: 'main',
storage: './database.sqlite',
},
log: {
path: './logs',
},
};
module.exports = config;
7. Соберите образ и запустите сервер
sudo docker compose up --build -d bary
8. Выполните установочный скрипт
install.js запускается внутри уже работающего контейнера bary, чтобы не поднимать второй экземпляр BARY с конфликтом HomeKit/mDNS.
sudo docker exec bary node /srv/install.js
После завершения install.js основной сервис bary продолжит работать в фоне.
9. Проверьте запуск
sudo docker ps -a
sudo docker compose logs bary --tail=100
Если всё запустилось успешно, веб-интерфейс будет доступен по адресу:
http://IP_СЕРВЕРА
10. Переход с SQLite на MySQL
mysql уже присутствует в docker-compose.yml, поэтому переход сводится к изменению конфига BARY и подготовке каталога для данных MySQL.
10.1. Убедитесь, что каталог для MySQL существует
mkdir -p /opt/stacks/bary/mysql
chmod 755 /opt/stacks/bary/mysql
ls -ld /opt/stacks/bary/mysql
10.2. Измените config/config.js
Замените SQLite-конфиг на MySQL-конфиг. Так как bary работает в host network, подключение к MySQL должно идти через 127.0.0.1 или localhost, а не через имя сервиса mysql.
{
"production": {
"dialect": "mysql",
"database": "bary",
"username": "bary",
"password": "password",
"host": "127.0.0.1",
"port": 3306,
"timezone": "+00:00"
}
}
Параметры должны совпадать с docker-compose.yml:
database->MYSQL_DATABASEusername->MYSQL_USERpassword->MYSQL_PASSWORDhost->127.0.0.1илиlocalhostport->3306
10.3. Запустите стек уже с MySQL
sudo docker compose up --build -d
После старта выполните установочный скрипт:
sudo docker exec bary node /srv/install.js
10.4. Проверьте MySQL
sudo docker compose logs mysql --tail=100
ls -la /opt/stacks/bary/mysql
Если MySQL стартовал корректно, в каталоге /opt/stacks/bary/mysql появятся файлы базы.
Полезные команды
Остановить сервисы:
sudo docker compose down
Пересобрать и запустить заново:
sudo docker compose up --build -d bary
sudo docker exec bary node /srv/install.js
Проверить, что база и логи сохраняются на хосте:
ls -l database.sqlite
ls -la logs
ls -la persist
ls -la mysql